// 权限拦截在路由跳转  导航守卫

import router from '@/router'
import store from '@/store' // 引入store实例
import nProgress from 'nprogress' // 引入进度条插件
import 'nprogress/nprogress.css' // 样式
// 前置守卫
// next 是前置守卫必须执行的钩子，必须执行，不执行页面死了
// next() 放过
// next(false) 跳转终止
// next(地址) 条转到某个地址
const whiteList = ['/login', '/404'] // 定义白名单

// 前置守卫
router.beforeEach(async(to, from, next) => {
  nProgress.start() // 开启进度条
  if (store.getters.token) {
    // 有token
    if (to.path === '/login') {
      // 是登陆页面免登录直接去登录页面
      // 不是的话 就放行
      next('/')
    } else {
      if (!store.getters.userId) {
        // 判断没有用户ID就去请求资料
        // await 等获取完用户资料后再去进行跳转页面
        await store.dispatch('user/getUserinfo')
      }
      next()
    }
  } else {
    // 没有token
    if (whiteList.indexOf(to.path) === -1) {
      // 表示除了白名单之外的地址，访问其他的地址都去登录页面
      // 否则的话放行
      next('/login')
    } else {
      next()
    }
  }
  nProgress.done() // 手动关闭进度条，因为跳转了页面后置守卫侦测不到所以需要手动关闭
})

// 后置守卫
router.afterEach(() => {
  nProgress.done() // 关闭进度条
})
